struct User{
    username:String,
    email:String,
    sign_in_count:u64,
    active:bool,
}

fn create_user() {
    println!("hello!");

    let user = User{
        email: String::from("123@126.com"),
        username: String::from("nikky"),
        active: true,
        sign_in_count: 556,
    };

    // 更新语法
    let user2 = User {
      email: String::from("456@126.com"),
        username: String::from("zhangsan"),
        ..user
    };
}

// 当参数名和实体内的字段名一样，传参可以简写如下：
fn build_user(email: String,username:String) -> User {
    User{
        email,
        username,
        active: true,
        sign_in_count: 556,
    }
}

fn tuple_struct() {
    struct Color(i32,i32,i32);
    struct Point(i32,i32,i32);
    let black = Color(0,0,0);
    let origin = Point(11,1,1);
    // black和origin是不同的类型，是不同的tuple struct的实例
}

fn struct_owner() {
    // struct 里也可以存放引用，但这需要使用生命周期
    // 生命周期保证只要struct实例是有效的，那么里面的引用也是有效的
    // 如果struct里面存储引用，而不使用生命周期，就会报错。
}

